package ACwing.P2DataSturcture.Trie;

import java.io.*;

/**
 * @Date : 2023-03-10
 * @Description:最大异或和
 */
public class MaxXorSum {
    static int N=100010,M=3000010;
    static int n;
    static  int [] a=new int[N];//存储数组
    static int[][] son=new int[M][2];//存储trie树
    static  int idx; //下一个可用
    static StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static PrintWriter pw=new PrintWriter((new OutputStreamWriter(System.out)));
    public static void main(String[] args) throws IOException {
     /*朴素做法  暴力循环,当和二进制数每一位不一样时，异或和最大
        st.nextToken();
         n = (int) st.nval;
        for (int i = 0; i < n; i++) {
            st.nextToken();
            a[i]=(int)st.nval;
        }
        int res=0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                res=Math.max(res,a[i]^a[j]);
            }
        }
        pw.write(res);
        pw.flush();
        pw.close();*/
        st.nextToken();
        n = (int) st.nval;
        for (int i = 0; i < n; i++) {
            st.nextToken();
            a[i]=(int)st.nval;
            insert(a[i]);
        }
        int res=0;
        for (int i = 0; i < n; i++) {
            res=Math.max(res,query(a[i]));
        }
        pw.write(String.valueOf(res));
        pw.flush();
        pw.close();
    }
    static void insert(int x){
        int p=0;//i>=0,可以表示为~i,  -1取反是0
        for (int i = 30; i >=0 ; i--) {
                //x右移i位与运算，看第i位是不是1
                if(son[p][x>>i&1]==0) son[p][x>>i&1]=++idx;  //创建一个新节点
                p=son[p][x>>i&1];
        }
    }
    static int query(int x){
        int res=0,p=0;
        for (int i = 30; i >=0; i--) {
            int s=x>>i&1;
            if(son[p][s>0?0:1]!=0){  //和当前不一样的分支是否存在
                res+=1<<i;
                p=son[p][s>0?0:1];
            }else {//否则只能去相同的分支
             //   res+=0<<i;  可以省略
                p=son[p][s];
            }
        }
        return res;
    }
}
